

#include "Public.h"

#include "cmd_485.h"




//
//void gap_reset_time14( void );//主逻辑
//void gap_reset_time14( void )//主逻辑
//{
////    static u32 cnt1;
////    static u32 cnt2;    
//    
////    
////    gc.cnt1++;
////    
////    if( gc.cnt1>= 20000) //100ms
////    {
////       gc.cnt1=0;  
////      
////      
////      TIM_Cmd(TIM14, ENABLE);         
////    }
////    
////     gc.cnt2++;
////    if( gc.cnt2>= 400000) //2s
////    {
////      gc.cnt2=0;  
////      
////      
////      for(;;)                                                           /* wait until reset */
////      {
////      __NOP();
////      }
////      
////
////            
////    }
////    
////    
//  
//
//    
//}
//



u8 STR_CM(char *A, char *B,u16 Lmax)//字符串比较
{
//  u8 Q;    
  u16 L;
  u8 i;
  
  L=strlen(A);
  if(L!=strlen(B) || L>=Lmax)
  {
    return 0;
  }
  else
  {
    
    for( i=0;i<L;i++)  //对比8位
    {
      if( *(A+i)!= *(B+i))
      {
        return 0;
      }
    }
    return 1;      
  }
}




void gap_time_save(u16 gap_time)//定时存
{
  gc.WriteData_delay_time=gap_time; 
  gc.WriteData_delay_cnt=0;
  gc.WriteData_filish = 0;   
}






void page_logic( void )//页面逻辑
{
      u32 temp_BaudRate;      
  

//==============================锁屏唤醒========================================
   
   
    if( display_onoff==0)  
    {
      if( key6_event!=0 ||key5_event!=0||key4_event!=0||key3_event!=0||key2_event!=0||key1_event!=0)  //有按键按下，退出锁屏，并清除按键事件
      {
          display_onoff=1;
          OLED_Init(); 
          u8display_cmd=1;
          key6_event=0;
          key5_event=0;
          key4_event=0;
          key3_event=0;
          key2_event=0;
          key1_event=0; 
          delay_off_oled_panel_cnt=0;  
          gap_time_save(5000);//调用后5s保存数据             
      }         
    }
    else
    {
//----------------------60s无按键操作后锁屏---------------------------------     
      if (delay_off_oled_panel_cnt>=delay_off_oled_panel_time) 
      {
        delay_off_oled_panel_cnt=delay_off_oled_panel_time+1;
        display_onoff=0;
      }

      if( key6_event!=0 ||key5_event!=0||key4_event!=0||key3_event!=0||key2_event!=0||key1_event!=0)  //有按键按下，退出锁屏，并清除按键事件
      {
          delay_off_oled_panel_cnt=0;        
          gap_time_save(5000);//调用后5s保存数据           
          
      }    
    }


      
//==============================不同页面下按键操作========================================  
      switch( page )                        //
      {   
    
        case 0:  //首页
          {   
            auto_onoff=0;            
            if(key6_event!=0)  //菜单
            {
              page=10;
              select=0;
              key6_event=0;              
            }
            key6_event=0;
            key5_event=0;
            key4_event=0;
            key3_event=0;
            key2_event=0;
//            key1_event=0;             

            break;
          }
          
        case 1:      //关屏    
          {
            auto_onoff=0;
            if(key1_event!=0)
            {
                if(auto_onoff==0)
                {
                  page=0;  
                  select=0;
                     
                }
                else
                {
                  page=13;  
                  select=2;                  
                }
                key1_event=0;                
            }  
            
            if(key6_event!=0)  //菜单
            {
              if(auto_onoff==0)
              {
                page=0;  
                select=0;
                   
              }
              else
              {
                page=13;  
                select=2;                  
              }
              key6_event=0;              
            }
            if(key5_event!=0)  //菜单
            {
              if(auto_onoff==0)
              {
                page=0;  
                select=0;
                   
              }
              else
              {
                page=13;  
                select=2;                  
              }

              key5_event=0;              
            }            
            if(key4_event!=0)  //菜单
            {
              if(auto_onoff==0)
              {
                page=0;  
                select=0;
                   
              }
              else
              {
                page=13;  
                select=2;                  
              }

              key4_event=0;              
            }             
            if(key3_event!=0)  //菜单
            {
              if(auto_onoff==0)
              {
                page=0;  
                select=0;
                   
              }
              else
              {
                page=13;  
                select=2;                  
              }

              key3_event=0;              
            }             
            if(key2_event!=0)  //菜单
            {
              if(auto_onoff==0)
              {
                page=0;  
                select=0;
                   
              }
              else
              {
                page=13;  
                select=2;                  
              }

              key2_event=0;              
            } 

            break;
          }             
          
        case 10:      //一级菜单     
          {
            auto_onoff=0;
            if(key1_event!=0)
            {
                page=0;  
                select=0;
                key1_event=0;                
            } 
            
            if(key6_event!=0)
            {
              if(select==0)//参数设定
              {
                page=11;  
                select=0;
              }
              if(select==1)//能耗统计
              {
                page=12;  
                select=0;
              }  
               if(select==2) //故障查询
              {
                page=14; 
                select=0;
              }             
              if(select==3)//调试模式
              {
                page=13;  
                select=0;
              } 
 
              key6_event=0;

            }
            

            
            
            
            if(key5_event!=0 )  //
            {
              if(select==0)
              {
                select=3;
              }
              else
              {
                select--;
              }
              key5_event=0;
              u8display_cmd=1;//显示命令刷新全部
            }  







            
            if(key4_event!=0 )  //
            {
              if(select>=3)
              {
                select=0;
              }
              else
              {
                select++;
              }
              key4_event=0;
              u8display_cmd=1;//显示命令刷新全部
            }
          
            key6_event=0;
            key5_event=0;
            key4_event=0;
            key3_event=0;
            key2_event=0;
            key1_event=0; 
            
            
          
            break;
          }          
          
        case 11:      //延时参数页     
          {
           
            if(key1_event!=0)
            {
                page=10;  //一级菜单
                select=0;
                key1_event=0;                 
            } 
            
            if(key6_event!=0) //菜单
            {
//                page=10;  
//                select=0;
                key6_event=0;
            }            
            
//            if(key5_event!=0 )  //向上
//            {
//              u8display_cmd=1;//显示命令刷新全部
//              if(select==0)
//              {
//                select=3;
//              }
//              else
//              {
//                select--;
//              }
//              key5_event=0;
//            }              
//            if(key4_event!=0 )  //向下
//            {
//              u8display_cmd=1;//显示命令刷新全部
//              if(select>=3)
//              {
//                select=0;
//              }
//              else
//              {
//                select++;
//              }
//              key4_event=0;
//            } 
            
            
            if(key5_event!=0 )  //向上
            {
              u8display_cmd=1;//显示命令刷新全部
              if(select==0)
              {
                select=0;
                page=17;
              }
              else
              {
                select--;
              }
              key5_event=0;
            }              
            if(key4_event!=0 )  //向下
            {
              u8display_cmd=1;//显示命令刷新全部
              if(select>=3)
              {
                select=0;
                page=17;
              }
              else
              {
                select++;
              }
              key4_event=0;
            }             

            if(key3_event!=0 )  //向右
            {
              u8display_cmd=1;//显示命令刷新全部
              if(select==0)
              {

                if(work_time1<=100)//0.1s
                {
                  work_time1=100;
                }
                else
                {
                  work_time1-=100;
                }
              }                
              if(select==1)
              {
                
                if(work_time2<=100)//20s
                {
                  work_time2=100;
                }
                else
                {
                  work_time2-=100;
                }
              } 
              if(select==2)
              {
                
                if(work_time3<=100)//20s
                {
                  work_time3=100;
                }
                else
                {
                  work_time3-=100;
                }
              }               
              if(select==3)
              {
                
                if(work_time4<=100)//20s
                {
                  work_time4=100;
                }
                else
                {
                  work_time4-=100;
                }
              }               
              key3_event=0;
              

            }  
            
            if(key2_event!=0 )  //向左
            {
              u8display_cmd=1;//显示命令刷新全部              
              if(select==0)
              {

                if(work_time1>=20000)//20s
                {
                  work_time1=20000;
                }
                else
                {
                  work_time1+=100;
                }
              }                
              if(select==1)
              {

                if(work_time2>=20000)//20s
                {
                  work_time2=20000;
                }
                else
                {
                  work_time2+=100;
                }
              } 
              if(select==2)
              {

                if(work_time3>=20000)//20s
                {
                  work_time3=20000;
                }
                else
                {
                  work_time3+=100;
                }
              }               
              if(select==3)
              {

                if(work_time4>=20000)//20s
                {
                  work_time4=20000;
                }
                else
                {
                  work_time4+=100;
                }
              }               
              key2_event=0;
            }              

            key6_event=0;
            key5_event=0;
            key4_event=0;
            key3_event=0;
            key2_event=0;
            key1_event=0; 
            
            in_ch1_event=0; 
            in_ch2_event=0;             
            

            break;
          }          

        case 12:      //能耗数据统计 
          {

            if(key1_event!=0)
            {
                page=10;//一级菜单  
                select=0;
                key1_event=0;                 
            } 
            
            if(key6_event!=0)
            {
//                page=10;  //一级菜单
//                select=0;
                key6_event=0;
            } 
            key6_event=0;
            key5_event=0;
            key4_event=0;
            key3_event=0;
            key2_event=0;
            key1_event=0;                 
                 
            break;
          }

        case 13:      //调试页 
          {

            if(key1_event!=0)
            {
                page=10;  
                select=0;

                out_ch1_val=0; 
                out_ch2_val=0;                
                auto_onoff=0;
                key1_event=0;                
            }
            
            if(key6_event!=0)
            {
//                page=10;  
//                select=0;
//                out_ch1_val=0; 
//                out_ch2_val=0;              
//                auto_onoff=0;
                key6_event=0;                
            }
            if(key5_event!=0 )  //向上
            {
              u8display_cmd=1;//显示命令刷新全部
              if(select==0)
              {
                select=0;
                page=15;
              }
              else
              {
                select--;
              }
              key5_event=0;
            }              
            if(key4_event!=0 )  //向下
            {
              u8display_cmd=1;//显示命令刷新全部
              if(select>=2)
              {
                select=0;
                page=15;
              }
              else
              {
                select++;
              }
              key4_event=0;
            } 
            
            if(key3_event!=0 )  //向左
            {
              u8display_cmd=1;//显示命令刷新全部
              if(select==0)
              {
                
                if(out_ch1_val!=0)//
                {
                  out_ch1_val=0;
                }
              }                
              if(select==1)
              {
                if(out_ch2_val!=0)//
                {
                  out_ch2_val=0;
                }
              } 
              if(select==2)
              {
                
                if(auto_onoff!=0)//
                {
                  auto_onoff=0;
                }
              }
             
              
              

              key3_event=0;
            }              
            if(key2_event!=0 )  //向右
            {
              u8display_cmd=1;//显示命令刷新全部

              
              if(select==0)
              {
                if(out_ch1_val==0)//
                {
                  out_ch1_val=1;
                }
              } 
              if(select==1)
              {
                
                if(out_ch2_val==0)//
                {
                  out_ch2_val=1;
                }
              }               
              if(select==2)
              {
                
                if(auto_onoff==0)//
                {
                  auto_onoff=1;
                }
              } 

              
              key2_event=0;

            }  

            key6_event=0;
            key5_event=0;
            key4_event=0;
            key3_event=0;
            key2_event=0;
            key1_event=0;                 

            break;
          } 
        case 14:      //故障查询 
          {

            if(key1_event!=0)
            {
                page=10;  
                select=0;
                key1_event=0;                 
            } 
            
            if(key6_event!=0)
            {
              
              page=10;  
              select=0;              
              key6_event=0;
              
            }  
            key6_event=0;
            key5_event=0;
            key4_event=0;
            key3_event=0;
            key2_event=0;
            key1_event=0;     
            break;
          }           
          
        case 15:      //波特率 
          {

            if(key1_event!=0)
            {
                page=13;  
                select=0;
                key1_event=0;
               
            } 
            
            if(key6_event!=0)
            {
                page=13;  
                select=0;
                key6_event=0;
            }
            
            
            if(key5_event!=0 )  //向上
            {
              u8display_cmd=1;//显示命令刷新全部
              if(select==0)
              {
                select=0;
                page=13;
              }
              else
              {
                select--;
              }
              key5_event=0;
            }              
            if(key4_event!=0 )  //向下
            {
              u8display_cmd=1;//显示命令刷新全部
              if(select>=3)
              {
                select=0;
                page=16;
              }
              else
              {
                select++;
              }
              key4_event=0;
            }            
            

            
            if(key3_event!=0 )  //向左
            {
              u8display_cmd=1;//显示命令刷新全部
              if(select==0)
              {
                if(BaudRate_485_lock==0)
                {
                  u8display_cmd=1;//显示命令刷新全部
                  temp_BaudRate=BaudRate_485_H*65536+BaudRate_485_L;                  
                  if(temp_BaudRate==9600)//
                  {
                    temp_BaudRate=9600;
                  }
                  else if(temp_BaudRate==14400)//
                  {
                    temp_BaudRate=9600;
                  }              
                  else if(temp_BaudRate==19200)//
                  {
                    temp_BaudRate=14400;
                  }          
                  else if(temp_BaudRate==38400)//
                  {
                    temp_BaudRate=19200;
                  }                
                  else if(temp_BaudRate==57600)//
                  {
                    temp_BaudRate=38400;
                  }                
                  else if(temp_BaudRate==115200)//
                  {
                    temp_BaudRate=57600;
                  } 
                  else
                  {
                    temp_BaudRate=9600;                
                  }

                  BaudRate_485_L=(u16)temp_BaudRate;
                  BaudRate_485_H=(u16)(temp_BaudRate>>16);                
                                  
                }                 
              }              
              if(select==1)
              {
                if(id_485>0)
                {
                  id_485--;
                }
              }
              if(select==3)
              {
                BEEP_EN=0;
              }              
              
              
              key3_event=0;
            }  

            
            if(key2_event!=0 )  //向右
            {
              u8display_cmd=1;//显示命令刷新全部
              if(select==0)
              {
                if(BaudRate_485_lock==0)
                {
                  u8display_cmd=1;//显示命令刷新全部
                 
                  temp_BaudRate=BaudRate_485_H*65536+BaudRate_485_L;                  
                  
                  
                if(temp_BaudRate==9600)//
                {
                  temp_BaudRate=14400;
                }
                else if(temp_BaudRate==14400)//
                {
                  temp_BaudRate=19200;
                }              
                else if(temp_BaudRate==19200)//
                {
                  temp_BaudRate=38400;
                }          
                else if(temp_BaudRate==38400)//
                {
                  temp_BaudRate=57600;
                }                
                else if(temp_BaudRate==57600)//
                {
                  temp_BaudRate=115200;
                }                
                else if(temp_BaudRate==115200)//
                {
                  temp_BaudRate=115200;
                } 
                else
                {
                  temp_BaudRate=9600;                
                }

                  BaudRate_485_L=(u16)temp_BaudRate;
                  BaudRate_485_H=(u16)(temp_BaudRate>>16);                
                                  
                }                 
              }                
              if(select==1)
              {
                if(id_485<255)
                {
                  id_485++;
                }
              } 
              if(select==3)
              {
                BEEP_EN=1;
              }               
              
              
              key2_event=0;
            }  

            key6_event=0;
            key5_event=0;
            key4_event=0;
            key3_event=0;
            key2_event=0;
            key1_event=0;     

            break;
          }  

          
        case 16:      //故障复位 
          {
            if(key1_event!=0)
            {
              page=10;  
              select=0;
              key1_event=0;
            } 
            
            if(key6_event!=0)
            {
              if(select==0)
              {
                waning_numb=0;  
                page=10;  
                select=0;
                key6_event=0;
              } 
              if(select==1)
              {
                gc.WriteData_delay_time=10000;//避免上电错误，还没读出数据就先写数据了
                id_485=1;                 //数据初始值
                work_time1=2000;                 //数据初始值
                work_time2=2000;                 //数据初始值
                work_time3=1500;                 //数据初始值
                work_time4=1000;                 //数据初始值
                stop_times=5;                 //数据初始值
                run_times=0;                 //数据初始值
                water_consumption=5;                 //数据初始值
                waters=0;                 //数据初始值
                ele_consumption=1;                 //数据初始值
                eles=0;                 //数据初始值
                waning_numb=0;                 //数据初始值
    
                if( modle==0)   //CS1000
                {
                  waning_numb_EN=0x0700;                 //      
                }
                else if( modle==1) //CS2000
                {
                  waning_numb_EN=0x0733;                 //      
                }
                else if( modle==2)   //CS3000
                {
                  waning_numb_EN=0x0733;                 //      
                }
                
                else if( modle==3)  //CS3500
                {
                  waning_numb_EN=0X0B11;                 //      
                }    
                
                else if( modle==10)//JHQA-01
                {
                  waning_numb_EN=0X0B11;                 //      
                }    
                
                else if( modle==11) //JHBA-02
                {
                  waning_numb_EN=0x0733;                 //      
                }        
                
                else if( modle==12) //JHBD-01
                {
                  waning_numb_EN=0x0733;                 //      
                }       
                
                else if( modle==13) //JHBK08
                {
                  waning_numb_EN=0x1322;                 //      
                }                   
                
                BaudRate_485_L=(u16)19200;
                BaudRate_485_H=(u16)(19200>>16);                
                
                BaudRate_485_lock=0;
                
                BaudRate_internet_L=(u16)115200;
                BaudRate_internet_H=(u16)(115200>>16);
                
                BaudRate_internet_lock=0;
                
                delay_off_oled_panel_time=60;                 //数据初始值
                
                waning_display_gap_time=1;                 //数据初始值
                
                BEEP_off_time=1000;                 //数据初始值
                
                BEEP_on_time=30;                 //数据初始值
                
                Heart_Time=60;                 //数据初始值
                
                autoflushcaptime=5000;                 //数据初始值
                
                timestamp_H=0;                 //数据初始值
                timestamp_L=0;                 //数据初始值
                
                gc.WriteData_cmd =1;           //写数据初始值
                
                
                
                page=10;  
                select=0;
                key6_event=0;
              }                

            }
            
            if(key5_event!=0 )  //向上
            {
              u8display_cmd=1;//显示命令刷新全部
              if(select==0)
              {
                select=0;
                page=15;
              }
              else
              {
                select--;
              }
              key5_event=0;
            }              
            if(key4_event!=0 )  //向下
            {
              u8display_cmd=1;//显示命令刷新全部
              if(select>=1)
              {
                select=0;
                page=13;
              }
              else
              {
                select++;
              }
              key4_event=0;
            }            

            key6_event=0;
            key5_event=0;
            key4_event=0;
            key3_event=0;
            key2_event=0;
            key1_event=0;                 
            
            break;
          }  

        case 17:      //满水报警循环次数 
          {
            if(key1_event!=0)
            {
              page=11;  
              select=0;
              key1_event=0;
            } 
            
            if(key6_event!=0)
            {
//              if(select==0)
//              {
//                waning_numb=0;  
//                page=11;  
//                select=0;
//                key6_event=0;
//              } 
//              if(select==1)
//              {
//                page=11;  
//                select=0;
//                key6_event=0;
//              } 
//              
              
              key6_event=0;
            }
            
            if(key5_event!=0 )  //向上
            {
              u8display_cmd=1;//显示命令刷新全部
              
              select=0;
              page=11;              
              
              
              key5_event=0;
            }              
            if(key4_event!=0 )  //向下
            {
              u8display_cmd=1;//显示命令刷新全部

              
              select=0;
              page=11;              
              
              key4_event=0;
            }  
            
            if(key3_event!=0 )  //向右
            {
              u8display_cmd=1;//显示命令刷新全部
              if(select==0)
              {

                if(stop_times<=1)//次
                {
                  stop_times=1;
                }
                else
                {
                  stop_times-=1;
                }
              }                
              key3_event=0;
              

            }  
            
            if(key2_event!=0 )  //向左
            {
              u8display_cmd=1;//显示命令刷新全部              
              if(select==0)
              {

                if(stop_times>=10)//次
                {
                  stop_times=10;
                }
                else
                {
                  stop_times+=1;
                }
              }                
              
              key2_event=0;
            }              
            
            
            
            
            


            key6_event=0;
            key5_event=0;
            key4_event=0;
            key3_event=0;
            key2_event=0;
            key1_event=0;                 
            
            break;
          }  
          
        default:
          page=0;

          break;
      }   
  
}


void led_logic( void )//led逻辑
{
  
  ledpower_1;  //打开电源
  
  if(in_ch3_status!=0)  //真空开关
  {
    ledzenkong_1;
  }
  else
  {
    ledzenkong_0;
  }
  
  if(out_ch1_val!=0)  //水阀
  {
    ledshuifa_1;
  }
  else
  {
    ledshuifa_0;
  } 
    
  if(out_ch2_val!=0)  //气阀
  {
    ledqifa_1;
  }
  else
  {
    ledqifa_0;
  }  
  

  
  
  if(page==0)  //冲洗
  {
    if(key1_status!=0 || in_ch2_status!=0)  //面板按键和冲洗开关
    {
      ledcongxi_1;
    }
    else
    {
      ledcongxi_0;
    }     
  }
  else
  {
    ledcongxi_0;
  }      
  
 
  
  if(waning_numb!=0)//故障
  {
    ledwarning_1;
  }
  else
  {
    ledwarning_0;
  }  



  
  
  
  
  
//  if(key1_status!=0 || in_ch1_status!=0 || in_ch2_status!=0)  //冲洗
//  {
//    ledcongxi_1;
//  }
//  else
//  {
//    ledcongxi_0;
//  }    
//  if( !=0)  //报警
//  {
//    ledwarning_1;
//  }
//  else
//  {
//    ledwarning_0;
//  }     
//  
  
  
}




void setup_uart1_BaudRate( void );//刷新波特率

void setup_uart1_BaudRate( void )//刷新波特率，在1s的时机点判断是否刷新波特率
{
  uart1.uart_BaudRate_S_cnt++; 
  if( uart1.uart_BaudRate_S_cnt>=3  && uart1.Txing_status==0)//3S刷新1次//是否已经发送完0发完1正在发
  {  
      uart1.uart_BaudRate_S_cnt =0;      
      if(BaudRate_485_L!=BaudRate_485_last)
      {
        USART1_Init();
      }
      
      BaudRate_485_last=BaudRate_485_L;// 上次的波特率485波特率  
  }       
}

void setup_uart2_BaudRate( void );//刷新波特率

void setup_uart2_BaudRate( void )//刷新波特率，在1s的时机点判断是否刷新波特率
{
  uart2.uart_BaudRate_S_cnt++; 
  if( uart2.uart_BaudRate_S_cnt>=3  && uart2.Txing_status==0)//3S刷新1次//是否已经发送完0发完1正在发
  {  
      uart2.uart_BaudRate_S_cnt =0;      
      if(BaudRate_internet_L!=BaudRate_internet_last)
      {
        USART2_Init();
      }
      
      BaudRate_internet_last=BaudRate_internet_L;// 上次的波特率485波特率  
  }       
}



void warning( void )//红外感应异常报警
{
//        u8 i;
        u32 temp;
//        u8 times;  //3min内触发次数
  

  static u8 out_ch1_val_last	;//   水阀上次状态
  static u8 out_ch2_val_last	;//   气阀上次状态  
  static u8 out_ch3_val_last	;//   预留上次状态
//  static u8 out_ch4_val_last	;//   预留上次状态  
  
  
  
  
//times=17;  //3min内触发次数 17      9月25号版是5没改过来 
//warning_time=180;//30;            9月25号版是30没改过来
//warning_reset_time=180;//30;      9月25号版是30没改过来   
  


////================ 红外异常判断============================== 
//  if(IR_waning_time_cnt>=60000)//秒计数器太多了，就定时复位一下
//  {
//    IR_waning_time_cnt=0;
//    IR_time_index=0;
//  }
//
//  if(in_ch1_event!=0 )//采用移动存储的方式持续存储触发时间，当17次触发间隔小于3min
//  {
//    if(IR_time_index<times)
//    {
//      IR_time_data[IR_time_index]=IR_waning_time_cnt; 
//      IR_time_index++;       
//    }
//    else
//    {
//      for(i=0;i<times-1;i++)
//      {
//        IR_time_data[i]=IR_time_data[i+1];
//      }
//      IR_time_data[times-1]=IR_waning_time_cnt;
//      
//
//      if(IR_time_data[times-1]-IR_time_data[0]<warning_time)
//      {
//        temp=waning_numb&0x00000100;
//        if(temp==0 )
//        {
//          waning_numb|=0x00000100; //红外异常
//        }
//      }
//      
//    }
//  }
//
//  if(IR_OUT_H_time>=warning_time  )//180s,维持3min高电平说明红外传感器也坏了
//  {
//    IR_OUT_H_time=warning_time; 
//    temp=waning_numb&0x00000100;
//    if(temp==0 )
//    {
//      waning_numb|=0x00000100; //红外异常        
//    }
//  }
//  
//  if(IR_OUT_L_time>=warning_reset_time)//180s,说明红外已恢复
//  {
//    IR_OUT_L_time=warning_reset_time;
//    temp=waning_numb&0x00000100;
//    if(temp!=0 )      
//    {
//      waning_numb&=~0x00000100; //红外恢复正常 
//      in_ch1_event=0;      //清除红外事件
//    }    
//  }  

  waning_numb&=~0x00000100; //解除红外报警

  
//===============冲水开关异常判断===========================================
  if(button_OUT_H_time>=warning_time)//,说明按钮坏了
  {
    button_OUT_H_time=warning_time;
    temp=waning_numb&512;
    if(temp==0 )
    {
      waning_numb|=512; //按钮异常      
    }
  }

  if(button_OUT_L_time>=warning_reset_time)//,说明按钮已恢复
  {
    button_OUT_L_time=warning_reset_time;
    temp=waning_numb&512;
    if(temp!=0 )      
    {
      waning_numb&=~512; //按钮异常
       
    }    
  }
  
  
  
  
  

 //================继电器状态计时器处理===================== 
   if(out_ch1_val_last  !=out_ch1_val)
   {
     if(out_ch1_val==0)
     {
       relay1_off_time=0;//   继电器持续无效输出时间s 
     }
     else
     {
       relay1_on_time=0;//   继电器持续有效输出时间s            
     }            
   }
  
  
    if(relay1_on_time>=50000)
    {
      relay1_on_time=50000;
    }
    if(relay1_off_time>=50000)
    {
      relay1_off_time=50000;  
    }  

   if(out_ch2_val_last  !=out_ch2_val)
   {
     if(out_ch2_val==0)
     {
       relay2_off_time=0;//   继电器持续无效输出时间s 
     }
     else
     {
       relay2_on_time=0;//   继电器持续有效输出时间s            
     }            
   }

    if(relay2_on_time>=50000)
    {
      relay2_on_time=50000;
    }
    if(relay2_off_time>=50000)
    {
      relay2_off_time=50000;  
    }  

   if(out_ch3_val_last  !=out_ch3_val)
   {
     if(out_ch3_val==0)
     {
       relay3_off_time=0;//   继电器持续无效输出时间s 
     }
     else
     {
       relay3_on_time=0;//   继电器持续有效输出时间s            
     }            
   }
  
    if(relay3_on_time>=50000)
    {
      relay3_on_time=50000;
    }
    if(relay3_off_time>=50000)
    {
      relay3_off_time=50000;  
    }  

//-------------------更新状态------------------  
    out_ch1_val_last  =out_ch1_val;
    out_ch2_val_last  =out_ch2_val;
    out_ch3_val_last  =out_ch3_val;
  
  
 //================继电器故障判断=====================   
//================负载1开路=====================  
   temp=waning_numb_EN&1;
   if(temp!=0)
   { 
     temp=waning_numb&1;
     if(temp==0)
     {
       if(out_ch1_val==0 && Relay1_Sensor_status==1 && relay1_off_time>=200)
       {
         waning_numb|=1;//负载1开路
       }
     } 
     else 
     {
       if(out_ch1_val==0 && Relay1_Sensor_status==0 && relay1_off_time>=200)
       {     
         waning_numb&=~1;//负载1故障恢复
       }       
     }  

         
   }
   else
   {
     waning_numb&=~1;//未使能此报警通道     
   }


//================负载2开路=====================  
   temp=waning_numb_EN&2;
   if(temp!=0)
   { 
     temp=waning_numb&2;
     if(temp==0)
     {
       if(out_ch2_val==0 && Relay2_Sensor_status==1 && relay2_off_time>=200)
       {
         waning_numb|=2;//负载1开路
       }
     } 
     else 
     {
       if(out_ch2_val==0 && Relay2_Sensor_status==0 && relay2_off_time>=200)
       {     
         waning_numb&=~2;//负载1故障恢复
       }       
     }         
  
   }
   else
   {
     waning_numb&=~2;//未使能此报警通道     
   }  

  
//================负载3开路=====================  
   temp=waning_numb_EN&4;
   if(temp!=0)
   { 
     temp=waning_numb&4;
     if(temp==0)
     {
       if(out_ch3_val==0 && Relay3_Sensor_status==1 && relay3_off_time>=200)
       {
         waning_numb|=4;//负载1开路
       }
     } 
     else 
     {
       if(out_ch3_val==0 && Relay3_Sensor_status==0 && relay3_off_time>=200)
       {     
         waning_numb&=~4;//负载1故障恢复
       }       
     }      
    
   }
   else
   {
     waning_numb&=~4;//未使能此报警通道     
   }
  
  
//================继电器1开路=====================  
   temp=waning_numb_EN&16;
   if(temp!=0)
   { 
     temp=waning_numb&16;
     if(temp==0)
     {
       if(out_ch1_val==1 && Relay1_Sensor_status==0 && relay1_on_time>=200)
       {
         waning_numb|=16;//继电器1开路
       }
     }  
     else
     { 
       if(out_ch1_val==1 && Relay1_Sensor_status==1 && relay1_on_time>=200)
       {
         waning_numb&=~16;//继电器1故障恢复
       }       
     }     
   }
   else
   {
     waning_numb&=~16;//未使能此报警通道     
   }
  
//================继电器2开路=====================  
   temp=waning_numb_EN&32;
   if(temp!=0)
   { 
     temp=waning_numb&32;
     if(temp==0)
     {
       if(out_ch2_val==1 && Relay2_Sensor_status==0 && relay2_on_time>=200)
       {
         waning_numb|=32;//继电器2开路
       }
     }  
     else
     { 
       if(out_ch2_val==1 && Relay2_Sensor_status==1 && relay2_on_time>=200)
       {
         waning_numb&=~32;//继电器2故障恢复
       }       
     }       
   }
  
   else
   {
     waning_numb&=~32;//未使能此报警通道     
   }
  
//================继电器3开路=====================  
   temp=waning_numb_EN&64;
   if(temp!=0)
   { 
     temp=waning_numb&64;
     if(temp==0)
     {
       if(out_ch3_val==1 && Relay3_Sensor_status==0 && relay3_on_time>=200)
       {
         waning_numb|=64;//继电器3开路
       }
     }  
     else
     { 
       if(out_ch3_val==1 && Relay3_Sensor_status==1 && relay3_on_time>=200)
       {
         waning_numb&=~64;//继电器3故障恢复
       }       
     }     
   }
   
    else
   {
     waning_numb&=~64;//未使能此报警通道     
   }  

  
  
  
  
//================满水报警=====================   
   temp=waning_numb_EN&4096;
   if(temp!=0)
   { 
    if((waning_numb&4096)!=0)//报警复位
    {
      if(water_full_status!=0  )//满水
      {
        if(full_flush_cnt>=99 ) //限制最大值 
        {
             full_flush_cnt=99;   
        }  
      } 
      else
      {
        full_flush_cnt=0;
      }      
    }       
     
     
    if(full_flush_cnt>=stop_times ) 
    {
       waning_numb|=4096;//污水已满    
    }
    else
    {
       waning_numb&=~4096;//解除污水已满    
    }
   }
   else
   {
     waning_numb&=~4096;//未使能此报警通道     
   }   







   

  if(waning_numb_last!=waning_numb)
  {
    u8display_cmd=1;//显示命令刷新全部     
  }
  waning_numb_last=waning_numb;
  
  
  
  
  
  
  
  
  
  

}


void update_mod( void )//更新型号
{
    
    if( modle==0)   //CS1000
    {
      sys_modle=modle0;    
    }
    else if( modle==1) //CS2000
    {
      sys_modle=modle1;  
    }
    else if( modle==2)   //CS3000
    {
      sys_modle=modle2;    
    }
    
    else if( modle==3)  //CS3500
    {
      sys_modle=modle3;    
    }    
    
    else if( modle==10)//JHQA-01
    {
      sys_modle=modle10;  
    }    
    
    else if( modle==11) //JHBA-02
    {
      sys_modle=modle11;  
    }        
    
    else if( modle==12) //JHBD-01
    {
      sys_modle=modle12;    
    }       
    
    else if( modle==13) //JHBK08
    {
      sys_modle=modle13;     
    }     
    
  
}



void main_logic( void )//主逻辑
{
  static u16 temp;
  static u16 u16_1H_CNT;//1小时计数器
  
  
//==================时基========================================  
  
   if(gc.sys_ms_cnt>=100)//100ms时基
   {
     gc.sys_ms_cnt=0;
     temp++;
     

     if(temp>=10)      //1s时基 
     {
       temp=0;
       
       run_time++;//系统总运行时间 （s）       
       setup_uart1_BaudRate();//在1s的时机点判断是否刷新波特率
       setup_uart2_BaudRate();//在1s的时机点判断是否刷新波特率       
        

       IR_waning_time_cnt++;//红外传感器故障报警计时器
       if(in_ch1_level==0)  //红外电平有效
       {
        IR_OUT_H_time=0;//   红外传感器持续输出高时间*1s    
        IR_OUT_L_time++;//   红外传感器持续输出低时间*1s          
       }
       else
       {
        IR_OUT_H_time++;//   红外传感器持续输出高时间*1s    
        IR_OUT_L_time=0;//   红外传感器持续输出低时间*1s          
       }
       
       if(in_ch2_level==0)  //冲水开关电平有效
       {
        button_OUT_H_time=0;//   冲水开关按钮持续有效输出时间s         
        button_OUT_L_time++;//   冲水开关按钮持续无效输出时间s          
       }
       else
       {
        button_OUT_H_time++;//   冲水开关按钮持续有效输出时间s         
        button_OUT_L_time=0;//   冲水开关按钮持续无效输出时间s           
       } 
       
       if(timestamp_L==65535)
       {
         timestamp_L=0;
         timestamp_H++;          
       }
       else
       {
         timestamp_L++;         
       }         
       
       Heart_Time_cnt++;        // 4G心跳时间计数器
       
       delay_off_oled_panel_cnt++;//关屏
       
       modbus_exit_cnt++;//modbus退出计数器 在程序里限制在1min退出
       
       waning_display_gap_time_cnt++;// 在故障查询页面，故障显示间隔时间计数器
       
       gc.sys_s_cnt++; 
       update_mod();//更新型号       
       if(gc.sys_s_cnt>=360)//0.1h
       {
         gc.sys_s_cnt=0;
         eles+=ele_consumption;//电量加0.1wh
         u8display_cmd=1;//显示命令刷新全部
         gc.Hour_cnt++;//系统时基 0.1小时 
         u16_1H_CNT++;
         if(u16_1H_CNT>=10)
         {
            u16_1H_CNT=0;
            gap_time_save(1);//调用后10s保存数据           
         }
       } 
     }
   }  
  
   
   
   
   
   
//==================冲洗触发======================================== 
  if(remote_flush!=0)
  {
    remote_flush=0;
    if(flush_status==0)
    {
      flush_status=1;//状态等于1等待真空状态
    }      
  }


   
//==================冲洗触发======================================== 
  
//  if((waning_numb>>8)&1!=0 )//红外异常，屏蔽红外型号
//  {
//    in_ch1_event=0;      //清除红外事件，防止报警程序继续使用
//    
//    if(key1_event!=0 || in_ch2_event!=0 )//冲洗屏蔽红外信号
//    {
//      if(page==0)
//      {
//        if(flush_status==0)
//        {
//          flush_status=1;//状态等于1等待真空状态
//        }      
//      }
//    }    
//  }
//  else
//  {
//    if(key1_event!=0 || in_ch1_event!=0 || in_ch2_event!=0 )//正常冲洗
//    {
//      if(page==0 )
//      {
//
//        if(flush_status==0)
//        {
//          flush_status=1;//状态等于1等待真空状态
//        }      
//      }
//    }      
//  }
  
  
  if(key1_event!=0 || in_ch1_event!=0 || in_ch2_event!=0 )//正常冲洗
  {
    if(page==0 )
    {

      if(flush_status==0)
      {
        flush_status=1;//状态等于1等待真空状态
      }      
    }
  }   
  

  
  key1_event=0;
  in_ch1_event=0;
  in_ch2_event=0; 
  
  
  
  

  if(auto_onoff!=0 && auto_onoff_cnt>=autoflushcaptime )//自动冲洗
  {
    auto_onoff_cnt=autoflushcaptime;
    if(flush_status==0)
    {
      flush_status=1;//状态等于1等待真空状态
    }
  } 
  
  
  
  
  if(key1_long_event!=0  || in_ch2_long_event!=0 )//强制冲洗
  {
    if(flush_status==0)
    {
      flush_status=7;//开始强制冲洗
    }
    key1_long_event=0;
    in_ch2_long_event=0;
  }  



  
  
  
  
  if((waning_numb&4096)==0)//满水抽吸开启自动
  {
    if(water_full_status!=0  )//满水抽吸开启自动
    {
      if(page==0)
      {
        if(flush_status==0)
        {
          full_flush_cnt++;
          if(full_flush_cnt>=99 ) //限制最大值 
          {
            full_flush_cnt=99;   
          } 
          if(full_flush_cnt<stop_times ) 
          {
            flush_status=10;//满水抽吸功能           
          }
        }        
        
      }
    } 
    else
    {
      full_flush_cnt=0;
    }    
  }

  
  


  

      

  switch( flush_status )                        //
  {   

    case 1:  //等待真空状态
      {   
        if(in_ch3_status==0 &&auto_onoff_cnt>=2)
        {
          auto_onoff_cnt=autoflushcaptime;
          flush_status=2;
          work_time2_cnt      =0;       //  第1次冲水计数
          work_time3_cnt     =0;      // 气阀打开计数
          work_time4_cnt    =0;       // 第2次冲水计数
//          out_ch2_val=1;          //打开气阀
        }
        break;
      }
      
    case 2:      //进入冲洗流程   
      {
        if(work_time2_cnt<work_time2)
        {
          out_ch2_val=1;         //打开气阀
        }
        else
        {
          
          out_ch2_val=0;         //关气阀
          work_time3_cnt=0;      // 气阀打开计数          
          flush_status=3;          
        }
        
       

        break;
      }             
      
    case 3:      //写    
      {
        if(work_time3_cnt<work_time3)
        {
          out_ch2_val=0;         //关气阀
        }
        else
        {
          out_ch2_val=1;          //开气阀 
          work_time4_cnt=0;       // 第2次冲水计数  
          flush_status=4;          
        }
        


        break;
      }          
      
    case 4:      //     
      {
        if(work_time4_cnt<work_time4)
        {
          out_ch2_val=1;         //开气阀 
        }
        else
        {
          out_ch2_val=0;        //关气阀
          work_time4_cnt=0;       // 第2次冲水计数 
          flush_status=5;  
        }

        break;
      }  
    case 5:      //     
      {
        if(work_time4_cnt<300)
        {
          out_ch2_val=0;         //开气阀 
        }
        else
        {
          out_ch2_val=0;        //关气阀
          flush_status=0;
          
          work_time1_cnt=0;       // 气阀延时计数
          work_time2_cnt=0;       //  第1次冲水计数
          work_time3_cnt=0;      // 气阀打开计数
          work_time4_cnt=0;       // 第2次冲水计数 
          
          run_times++;       // 冲水计数+1
          run_times_H=run_times>>16;//更新高16位
          
          waters+=water_consumption;
          
          auto_onoff_cnt=0;//复位间隔计数器
          
          u8display_cmd=1;//显示命令刷新全部
          
          gap_time_save(5000);//调用后5s保存数据
          
          
        }

        break;
      }  
      
    case 7:      //  开始强制冲洗     
      {
//        power_flush_cnt=0; 
        
        work_time2_cnt    =0;       //  第1次冲水计数
        work_time3_cnt    =0;      // 气阀打开计数
        work_time4_cnt    =0;       // 第2次冲水计数        
        flush_status=2;       //不等待真空之间进入2阶段

        break;
      }  
    case 10:  //等待真空状态并等待5s
      {   
        if(in_ch3_status==0 && auto_onoff_cnt>=5000)
        {
          auto_onoff_cnt=autoflushcaptime;
          flush_status=2;
          work_time2_cnt      =0;       //  第1次冲水计数
          work_time3_cnt     =0;      // 气阀打开计数
          work_time4_cnt    =0;       // 第2次冲水计数
//          out_ch2_val=1;          //打开气阀
        }
        break;
      }
            




    default:
      flush_status=0;

      break;
  }   

  
  if (  run_times>=99999999 )
  {
    run_times=99999999;                 //数据初始值
//    gc.WriteData_cmd =1;                 //写数据初始值
  }    
  
  
}





void logic( void )//主逻辑

{
  if( gc.u8Scan_logic_1ms_cnt<2 )
  {  return; }      
  gc.u8Scan_logic_1ms_cnt =0;    
  
  

  
  
  page_logic();

  led_logic();
  
  warning();//报警

  main_logic();

}
  
  
  





